/**
 * @file Exceptions.h
 *
 * Klasy wyjątków DOGZ.
 *
 * @author Zbigniew Siciarz
 * @date 2009
 * @version 2.0.0
 * @since 2.0.0
 */

#ifndef EXCEPTIONS_H_
#define EXCEPTIONS_H_

#include <QtSql>
#include <QString>
#include <stdexcept>
#include <string>

namespace Dogz
{
    /**
     * Nadrzędna klasa wszystkich wyjątków DOGZ.
     */
	class Exception : public std::runtime_error
	{
	public:
	    /**
	     * Konstruktor obiektu wyjątku.
	     *
	     * @param what Tekst opisujący wyjątek.
	     */
		Exception(const QString& what):
			runtime_error(what.toStdString())
		{
		}
	};

	/**
	 * Klasa wyjątków obsługi plików.
	 */
	class FileException : public Exception
	{
	public:
	    FileException(const QString& what):	Exception(what), m_filename("") {}
	    FileException(const QString& filename, const QString& what):
	        Exception(what), m_filename(filename)
        {
        }
	    ~FileException() throw() {}

	    QString getFilename() const { return m_filename; }

	private:
	    QString m_filename;
	};

    /**
     * Klasa wyjątków bazy danych.
     */
    class DbException : public Exception
    {
    public:
        DbException(const QString& what): Exception(what) {}
        DbException(const QSqlQuery& query):
            Exception(query.lastError().text()), m_query(query.executedQuery())
        {
        }
        ~DbException() throw() {}

        QString getQuery() const { return m_query; }

    private:
        QString m_query;
    };

    /**
     * Wyjątki obsługisieci.
     */
    class NetworkException : public Exception
    {
    public:
        NetworkException(const QString& what): Exception(what) {}
        ~NetworkException() throw() {}
    };
}

#endif /* EXCEPTIONS_H_ */
